字串和數字是程式語言中最常使用到的資料型態。而在Ruby語言中,數字這個型態本身沒有疑問,但很多人會搞混字串與符號,甚至是不懂兩者的區別。
所以先來介紹這兩個資料型態,爾後再說說兩者使用的方式及適合的地方。
單引號
、雙引號
、%q()
、%Q()
以上4種方式可以表達資料型態為字串,符號內的文字即是字符串的值。
name = 'mei'
gender = "female"
school = %q(台灣大學)
department = %Q(資工系)
如果在使用字串時,剛剛好把定義型態用的引號和文字串中的引號使用一樣的符號時,電腦會不知道究竟哪邊是定義字串而使用的引號?哪邊是文字串中使用的引號?當遇上這種情況,電腦會將最近的兩個符號視為一組,那後面的文字排出在外,就會發生錯誤,來看看例子:
puts 'I'am a programmer.'
執行後出現錯誤訊息:「syntax error, unexpected tIDENTIFIER, expecting end-of-input」
可以看到程式自動把「'I'」視為字串的範圍,後面的am a programmer.被排除在外
\
來跳脫字元,避免電腦看不懂字串起始位置在哪裡,告訴電腦這邊是內容會用到的引號!puts "I'am a programmer."
puts "I'am a programmer."
puts 'I\'am a programmer.'
puts %q(I'am a programmer.')
# 以上4種寫法的執行結果都是 I'am a programmer.
若要顯示的一段文字包含字串及數字型態的變數:
subject = '國文'
score = 98
+
來連接,但數字和字串無法串接,須先把數字轉型為字串 to_s
:puts "我的" +subject+ "成績是" + score.to_s + "分"
# 執行結果 我的國文成績是98分
雙引號
及%Q
做字串安插:puts "我的#{subject}成績是#{score}分"
puts %Q(我的#{subject}成績是#{score}分)
# 以上的執行結果皆為 我的國文成績是98分
單引號
及%q
做字串安插,這樣的寫法電腦只會視為字串puts '我的#{subject}成績是#{score}分'
puts %q(我的#{subject}成績是#{score}分)
# 執行結果為 我的#{subject}成績是#{score}分
content = "我們是Ruby工程師"
content[0..1] = 我
puts content
# 執行結果
# 我是Ruby工程師
( Ruby 的陣列取值,第一個值的索引為0喔!)
:姓名
:name
:なまえ
上述提到string可以當成陣列來玩,以便修改內容,但是符號並沒有這樣的特性!
name = :kitty
gender = "female"
two = 2
p gender
p name
p two
# 執行結果
# "female"
# :name
# 2
2 = "kitty"
:name = "kitty"
p 2
p :name
執行後出現錯誤訊息:「syntax error, unexpected '=', expecting end-of-input」
2本身就是數字,不能當變數使用,故symbol也同樣道理
下面的authority有3種狀態:admin
、:manager
、:member
。
可以用符號來表示使用者擁有的權限為哪種狀態。
class User
attr_reader :authority
def initialize(username, authority= :member)
@username = username
@authority = authority
end
def admin
@authority = :admin
end
def manager
@authority = :manager
end
def member
@authority = :member
end
end
user = User.new(["kitty", "mei", "jill"])
if user.authority == :member
puts "user's authority is member."
end
author = { name: "eddie", book: "為你自己學" }
author = { :name => "eddie", :book => "為你自己學" }
class AbcController
def edit
# Do something
end
def update
if @data.save
redirect to ...
else
render :edit
end
end
end
等說完hash是什麼之後,就來比較一下string和symbol的差異,與為什麼hash用符號比字串來得適合...
參考資料:
為你自己學Ruby on Rails-高見龍
Ruby - Strings
學無止盡,每天都要進步一點點!